/**
* File Name: many_rw.c
* Auther: Jichang
* Create Time: 2023年10月04日 星期三 17时02分13秒
* 一个读端对应多个写端
*/
#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>
#include<string.h>
#include<stdlib.h>

int main(int argc, char *argv[]) {
	pid_t pid;
	int fd[2], i, n;
	char *str1 = "1.hello\n";
	char *str2 = "2.world\n";
	char buf[1024];

	int ret = pipe(fd); //创建管道
	if(ret == -1) {
		perror("pipe error.");
		exit(1);
	}

	for(i = 0; i < 2; i++) {
		if((pid = fork()) == 0) {
			break; //父进程
		} else if(pid == -1) {
			perror("pipe error.");
			exit(1);
		}
	}

	if(i == 0) {
		close(fd[0]);
		write(fd[1], str1, strlen(str1));
	} else if(i == 1) {
		close(fd[0]);
		write(fd[1], str2, strlen(str2));
	} else {
		/* 父进程关闭写端，留读端读取数据 */
		close(fd[1]);
		sleep(1);
		n = read(fd[0], buf, 1024); //从管道中读取数据
		write(STDOUT_FILENO, buf, n);

		for(i = 0; i < 2; i++) {
			//wait两次
			wait(NULL);
		}
	}

	return 0;
}

